package com.example.springcloud.streamconsumers.consumer.my;

import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;

/**
 * 接收消息的类
 * weiximei on 2018/8/25
 */

/**
 *  @EnableBinding() 绑定一个通道,去哪一个通道接收消息
 *  Sink.class 是spring cloud提供的一个接口，帮我们预定了一个input的接口。
 *
 *  Sink.class 部分源码：
 *
 *  @Input(Sink.INPUT)
 * 	SubscribableChannel input();
 *
 * 	表示某个方法上使用了@Input注解，并且返回的是SubscribableChannel这个类型，就可以当做为input的一个端口,
 *  然后把这个SubscribableChannel和@Iutput绑定起来就可以使用了。
 *
 *  也可以自定义一个 Sink 类型
 *
 *  使用我们自定义的 MySink 类
 *
 */
@EnableBinding(MySink.class)
public class RecieveService {

    /**
     * 这个 @StreamListener 注解表示，我监听哪一个消息通道。
     *  在上面绑定的是 Sink.class ，并且里面是 input 字样。
     *  所以里面的值是"input"
     *
     * @param payload
     */
    @StreamListener(MySink.INPUT)
    public void recieve(Object payload){
        System.out.println(payload);
    }

}
